<template>
  <view class="search" :class="{focused:isSearch}">
    <view class="sinput">
      <input v-model="keyWord" @confirm="goResult" @input="searchPrd" @focus="search" type="text" placeholder="搜索" />
      <button @click="cancel">取消</button>
    </view>
    <view class="scontent" v-show="isSearch">
      <div class="title">
        搜索历史
        <span @click="clearHistory" class="clear"></span>
      </div>
      <!-- 搜索历史记录 -->
      <div class="history" v-if="result.length === 0">
        <navigator :key="key" v-for="key in history" :url="'/packone/list/index?query='+key">{{key}}</navigator>
      </div>
      <!-- 结果 -->
      <scroll-view scroll-y class="result" v-else>
        <navigator :key="item.goods_id" v-for="item in result" url="/packone/goods/index">{{item.goods_name}}</navigator>
      </scroll-view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isSearch: false,

      // 建议商品列表
      result:[],

       // 搜索历史 => 确定搜索的时候保存当前搜索关键词
      history:uni.getStorageSync('history') || [],

      // 搜索关键词
      keyWord:''

     
    };
  },
  methods: {
    // 清楚搜索历史记录
    clearHistory() {
     
     // 本地删除
     uni.removeStorage({
        key: 'history',
        success:() => {
          // 页面数据删除
          this.history = []
        }
     })
    },

    // 跳转到搜索结果也
    goResult () {
      // 存储用户输入关键词到本地
      if (!this.history.includes(this.keyWord)) {
        // 不存在
         this.history.push(this.keyWord)

       // 本地储存一份完了之后页面刷新还可以获取历史搜索记录
       uni.setStorage({
        key: 'history',
        data: this.history,
      })
      }
     

      // 路由跳转
      uni.navigateTo({
        url:`/packone/list/index?query=${this.keyWord}`
      })
    },

    // 搜索输入
    searchPrd() {
      //  函数防抖===>一定事件内只执行最后一次
      this.timer && clearTimeout(this.timer)
      this.timer = setTimeout(() => {

      // 如果关键词为空 清空历史的建议商品列表
      if(!this.keyWord) {
        this.result = []
      }

      this.getSearchPrds(this.keyWord)
      }, 600);     
  
    },

    // 获取建议商品数据
    async getSearchPrds(keyWord) {
      const {msg,data} = await this.request({url:'/goods/qsearch',data:{query:keyWord}})
      console.log(msg,data);
      if (msg.status === 200) {
        this.result = data
      }
    },

    search() {
      this.isSearch = true;
      const pageHeight = uni.getSystemInfoSync().windowHeight + "px";
      uni.hideTabBar();
      this.$emit("search", pageHeight);
    },
    cancel() {
      this.isSearch = false;
      uni.showTabBar();

      // 清空用户输入
      this.keyWord = ''
      this.$emit("search", "auto");
    }
  }
};
</script>

<style lang="scss">
// 搜索
.search {
  display: flex;
  flex-direction: column;
  .sinput {
    box-sizing: border-box;
    padding: 20rpx 16rpx;
    background: #ff2d4a;
    position: relative;
    //伪元素
    &::after {
      position: absolute;
      top: 28rpx;
      left: 302rpx;
      content: "";
      width: 44rpx;
      height: 44rpx;
      line-height: 1;
      background-image: url(https://static.botue.com/ugo/images/icon_search%402x.png);
      background-size: 32rpx;
      background-position: 6rpx center;
      background-repeat: no-repeat;
    }
    input {
      background: #fff;
      flex: 1;
      height: 60rpx;
      line-height: 60rpx;
      text-align: center;
      font-size: 24rpx;
      color: #bbb;
      border-radius: 5rpx;
    }
    button {
      display: none;
      margin-left: 20rpx;
      width: 150rpx;
      height: 60rpx;
      line-height: 60rpx;
      text-align: center;
      font-size: 24rpx;
      border-radius: 5rpx;
      background: transparent;
      color: #666;
    }
  }
  &.focused {
    position: absolute;
    width: 100%;
    height: 100%;
    z-index: 10;
    .sinput {
      display: flex;
      background: #eee;
      input {
        text-align: left;
        padding-left: 60rpx;
      }
      button {
        display: block;
      }
      &::after {
        left: 30rpx;
      }
    }
  }
  .scontent {
    background: #fff;
    position: relative;

    flex: 1;
    padding: 27rpx;
    .title {
      font-size: 27rpx;
      line-height: 1;
      color: #333;
    }
    .clear {
      display: block;
      width: 27rpx;
      height: 27rpx;
      float: right;
      background-image: url(http://static.botue.com/ugo/images/clear.png);
      background-size: cover;
    }

    .history {
      padding-top: 30rpx;
      navigator {
        display: inline-block;
        line-height: 1;
        padding: 15rpx 20rpx 12rpx;
        background-color: #ddd;
        font-size: 24rpx;
        margin-right: 20rpx;
        margin-bottom: 15rpx;
        color: #333;
      }
    }

    .result {
      // display: none;
      position: absolute;
      left: 0;
      right: 0;
      top: 0;
      bottom: 0;
      background-color: #fff;
      navigator {
        line-height: 1;
        padding: 20rpx 30rpx;
        font-size: 24rpx;
        color: #666;
        border-bottom: 1px solid #eee;

        &:last-child {
          border-bottom: none;
        }
      }
    }
  }
}
</style>